package cn.biplam.common.bean.systemManage.privi;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.OperatorResult;
import cn.biplam.common.wrapper.ErrorMessage;

/**
 *  用户管理操作
 * @author XiaoRuxing Dec 3, 20093:39:25 PM
 * @version 1.0
 */
public abstract class UserManageBean extends Bean{

	/**
	 *  插入用户信息<BR>级联操作用户索引表
	 * @param groupId   用户分组ID
	 * @param userName  用户名称
	 * @param password  用户密码
	 * @return 返回是否执行成功,和插入的用户ID
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult insertUser(String groupId,
			String userName,
			String password) throws ErrorMessage;

	/**
	 *  插入用户信息<BR>级联操作用户索引表
	 * @param groupId    用户分组ID
	 * @param userName  用户名称
	 * @param password  用户密码
	 * @param language  语言
	 * @param userCode  用户代码
	 * @param gender    性别
	 * @param birthday  生日
	 * @param machineName 机器
	 * @return 返回是否执行成功,和插入的用户ID
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult insertUser(String groupId,
			String userName,
			String password,
			String language,
			String userCode,
			String gender,
			String birthday,
			String machineName) throws ErrorMessage;

	/**
	 *  添加用户角色(级联操作用户权限表)
	 * @param userId 用户ID
	 * @param roleId 角色ID
	 * @param getSql 是否返回SQL
	 * @return getSql==true:返回添加用户角色的SQL
	 *         getSql==false:执行添加用户角色操作,返回用户角色ID和执行是否成功
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult addUserRole(
			String userId,
			String roleId,
			boolean getSql) throws ErrorMessage;
	
	/**
	 *  根据用户角色ID查询用户角色
	 * @return 用户角色
	 * @throws ErrorMessage
	 */
	public abstract OperatorResult queryUserRoleById(String userRoleId) throws ErrorMessage;
	
	/**
	 *  添加用户角色(级联操作用户权限表)
	 * @param userId 用户ID
	 * @param roleList 角色列表
	 * @param getSql 是否返回SQL
	 * @return getSql==true:返回添加用户角色的SQL
	 *         getSql==false:执行添加用户角色操作,返回用户角色ID和执行是否成功
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult addUserRoles(
			String userId,
			String[] roleList,
			boolean getSql) throws ErrorMessage;
	
	/**
	 *  根据用户ID删除用户信息<BR>
	 *  级联操作用户索引表、用户权限表、用户角色表
	 * @param userId 用户ID
	 * @param getSql 是否返回SQL
	 * @return  getSql==true: 返回删除用户SQL<BR>
	 * 			getSql==false: 返回删除是否成功
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult delUser(String userId,boolean getSql) throws ErrorMessage;
	
	/**
	 *  删除用户角色
	 * @param userRoleId 用户角色ID
	 * @param getSql 是否返回SQL
	 * @return getSql==ture: 返回删除用户角色的SQL<BR>
	 *         getSql==false: 执行删除用户角色,返回删除是否成功
	 * @throws ErrorMessage 
	 */
	public abstract OperatorResult delUserRole(String userRoleId, boolean getSql) throws ErrorMessage;
	
	/**
	 *  获取用户是否具有权限
	 * @param userId 用户ID
	 * @param privId 权限ID
	 * @return 是否具有权限
	 * @throws ErrorMessage
	 */
	public abstract boolean havePrivi(String userId, String privId) throws ErrorMessage;
	
	/**
	 *  创建用户管理操作类
	 * @param userId 系统用户ID
	 * @return 户管理操作类
	 * @throws ErrorMessage
	 */
	public static UserManageBean getNewInstance(String userId) throws ErrorMessage{
		return (UserManageBean)get(UserManageBean.class.getSimpleName(), userId); 
	}
}
